const express = require('express');
const db = require('../db');
const md5=require('../util/md5')
//导入判断目录是否已经存在的处理模块
const mkdir = require('../util/mkdirs')
//引入中间件
const multer = require('multer');
var fs = require('fs');
  const path = require('path'); // 导入 path 模块
const router = express.Router();
//使用multer解析FormData数据
const storage = multer.memoryStorage(); // 将文件存储在内存中
const upload = multer({ storage: storage });
//登录验证jwt包
const jwt = require("jsonwebtoken");
//简易随机生成
const secretKey = 'weiyinglin';
const moment = require('moment');
const { error } = require('console');

//处理发布小纸条数据接口
router.post('/publishPaper',upload.none(),(req,res)=>{
const{title,content,uploadfile,account,username}=req.body;
// console.log(title,content,uploadfile,account)
// 获取当前时间的时间戳
const timestamp = Date.now();
// 使用 moment.js 格式化时间戳为指定格式
const formattedTime = moment(timestamp).format('YYYY-MM-DD_HH-mm-ss');
// 创建带有格式化时间的文件名
const fileName = `paperImg_${formattedTime}.jpg`;
const base64Data =uploadfile.replace(/^data:image\/\w+;base64,/, ""); //去掉图片base64码前面部分data:image/png;base64 
const dataBuffer =new Buffer.from(base64Data, 'base64');// 返回一个被 string 的值初始化的新的 Buffer 实例,原始二进制数据存储在 Buffer 类的实例中，  
// 根据路径动态创建文件夹，如果文件夹存在就不再创建文件夹，反之则创建文件夹
 mkdir.mkdirs(path.join(__dirname, `../paperImg/${account}`));
 const paperImgPath = path.join(__dirname, `../paperImg/${account}/${fileName}`)
 console.log(paperImgPath)

 fs.writeFile(paperImgPath, dataBuffer, function (err) {//用fs写入文件
  if (err) {
    console.log('图片写入失败');
  } else {
    console.log('图片成功写入！');
  }
})
//保存头像的相对地址到数据库中
const paperImgUrl = `/paperImg/${account}/${fileName}`
// 将新用户插入到数据库
const insertrQuery = 'INSERT INTO paper_table (title,content,account,username,image) VALUES (?, ?,?, ?,?)';
db.query(insertrQuery,[title,content,account,username,paperImgUrl],(err)=>{
  if (err) {
    console.error('Error inserting user to database', err);
    return res.status(500).json({ message: '服务器错误' });
  } 
      return res.status(201).json({message:'发布成功'})


})
})

//获取用户小纸条信息接口
router.get('/getPublishInfo',(req,res)=>{ 
  const selectQuery = 'SELECT title, content,username,image,created_at FROM  paper_table ORDER BY created_at DESC ';
  db.query(selectQuery, (error,rows) => {
    if (error) {
      console.error('Error executing query:', error);
      return res.status(500).json({ error: 'Error executing query' });
    }
      // console.log(rows)
      rows.forEach((row)=>{
        const {image,created_at}=row
        // console.log(image)
       const imagePath = path.join(__dirname, `../${image}`);  // 图片的实际存储路径
      //  console.log(imagePath)
      //分片发送base64格式图片
       if (fs.existsSync(imagePath)) {
        // // 读取文件并将其转换为Base64格式
        const imageBuffer = fs.readFileSync(imagePath);
        const base64Image = Buffer.from(imageBuffer).toString('base64');
           // 按固定大小分割 Base64 数据
        const chunkSize = 1024; // 每个分块的大小
        const totalChunks = Math.ceil(base64Image.length / chunkSize);
        const base64Chunks = [];
        for (let i = 0; i < totalChunks; i++) {
         const start = i * chunkSize;
         const end = start + chunkSize;
         const chunk = base64Image.substring(start, end);
         base64Chunks.push(chunk);
        }
        row.image={ totalChunks, base64Chunks }
       }
       const formattedDate = moment(created_at).format('YYYY-MM-DD');
       row.created_at=formattedDate
        // console.log(row)
      })
    // console.log(rows)
     return res.status(201).send(rows)
  })

})

//获取置顶公告信息
router.get('/getNoticeFirst',(req,res)=>{
  const selectQuery = 'SELECT title, content,author,updated_at FROM announcements  WHERE is_active="1" ';
 db.query(selectQuery,(error,rows)=>{
  if (error) {
    console.error('Error executing query:', error);
    return res.status(500).json({ error: 'Error executing query' });
  }
  // console.log(rows[0])
  return res.status(201).json(rows[0])
 })
  
})

//获取所有公告信息
router.get('/getAllNotice',(req,res)=>{
  const selectQuery = 'SELECT * FROM announcements  ORDER BY updated_at DESC ';
  db.query(selectQuery,(error,rows)=>{
   if (error) {
     console.error('Error executing query:', error);
     return res.status(500).json({ error: 'Error executing query' });
   }
   rows.forEach((row)=>{
    const formattedDate = moment(row.updated_at).format('YYYY-MM-DD');
      row.updated_at=formattedDate
   })
  //  console.log(rows[0])
   return res.status(201).json(rows)
  })
   
})

//根据用户手机号获取用户id接口 
router.get('/getuseridByaccount',(req,res)=>{
  const{account}=req.query
  const selectQuery='SELECT id FROM users WHERE account=?'
  db.query(selectQuery,[account],(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
    } 
    return res.status(201).json(rows[0])
  })
})

//获取用户聊天记录接口
router.get('/fetchChatMessages',(req,res)=>{
    const {senderId,receiverId}=req.query
    const selectQuery='SELECT * FROM messages WHERE sender_id=? AND receiver_id=?'
    db.query(selectQuery,[senderId,receiverId],(err,rows)=>{
      if (err) {
        console.error('Error inserting user to database', err);
        return res.status(500).json({ message: '服务器错误' });
       } 
       rows.forEach((row)=>{
        const originalTime=  row.send_time.toLocaleString()
        const updatedTime = originalTime.replace(/\//g, "-");
        row.send_time=updatedTime
       })
      res.status(201).json(rows)
    })

})

//根据咨询师姓名查询咨询师所有信息
router.get('/getconsultantInfoByName',(req,res)=>{
   const {name}=req.query
   const selectQuery='SELECT * FROM consultants WHERE name=?'
   db.query(selectQuery,[name],(err,rows)=>{
    if (err) {
      console.error('Error inserting user to database', err);
      return res.status(500).json({ message: '服务器错误' });
     } 
     else{
        return res.status(201).json(rows[0])
     }
   })
})

module.exports = router;